package com.sprouting.ops.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sprouting.ops.annotations.invoke.IdempotentSingle;
import com.sprouting.ops.interfaces.AddGroup;
import com.sprouting.ops.interfaces.ConstantBase;
import com.sprouting.ops.interfaces.UpdGroup;
import com.sprouting.ops.model.OpsEnvAccount;
import com.sprouting.ops.model.ResultJson;
import com.sprouting.ops.model.qo.OpsEnvAccountQo;
import com.sprouting.ops.service.OpsEnvAccountService;
import com.sprouting.ops.utils.CheckTool;
import com.sprouting.ops.utils.EntityTool;
import com.sprouting.ops.utils.IdTool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 环境账号访问信息(OpsEnvAccount)(OPS_ENV_ACCOUNT) 表控制层
 *
 * @author ：lx（长沙麓谷）
 * @date 创建时间：2025-09-08 16:07:37
 */
@Slf4j
@RestController
@RequestMapping("opsEnvAccount")
public class OpsEnvAccountController {

    @Resource
    private OpsEnvAccountService opsEnvAccountService;



    /**
     * 根据场所和类型查询  应用、组件、工具
     * @param siteId 场所
     * @param type 查询的类型 1 应用  2 组件  3 工具
     * @return
     */
    @PostMapping("getEnvAccount")
    public ResultJson getEnvAccount(String siteId, Integer type){
        if (CheckTool.checkNull(siteId)){
            return ResultJson.errorCheck();
        }
        if (type == null){
            return ResultJson.errorCheck();
        }

        return ResultJson.success(opsEnvAccountService.getEnvAccount(siteId, type));
    }


    /**
     * 分页查询环境账号访问信息
     * @param query 查询参数
     * @return
     */
    @PostMapping("getListPage")
    public ResultJson getListPage(OpsEnvAccountQo query){
        Page page = query.getPage();
        return ResultJson.success(opsEnvAccountService.getListPage(page, query));
    }

    /**
     * 删除环境账号访问信息
     * @param id 环境账号访问信息id
     * @return
     */
    @PostMapping("delOpsEnvAccount")
    @IdempotentSingle
    public ResultJson delOpsEnvAccount(String id){
        if (CheckTool.checkNull(id)){
            return ResultJson.errorCheck();
        }

        opsEnvAccountService.removeById(id);
        return ResultJson.success();
    }

    /**
     * 更新环境账号访问信息
     * @param bo 修改参数
     * @return
     */
    @PostMapping("updOpsEnvAccount")
    @IdempotentSingle
    public ResultJson updOpsEnvAccount(@Validated(UpdGroup.class) OpsEnvAccount bo){
        String msg = checkOpsEnvAccount(bo);
        if (msg != null){
            return ResultJson.error(msg);
        }

        EntityTool.updBase(bo);
        opsEnvAccountService.updateById(bo);
        return ResultJson.success(bo);
    }

    /**
     * 保存环境账号访问信息
     * @param bo 保存参数
     * @return
     */
    @PostMapping("saveOpsEnvAccount")
    @IdempotentSingle
    public ResultJson saveOpsEnvAccount(@Validated(AddGroup.class) OpsEnvAccount bo){
        String msg = checkOpsEnvAccount(bo);
        if (msg != null){
            return ResultJson.error(msg);
        }
        if (bo.getUserPeculiar() == null){
            bo.setUserPeculiar(ConstantBase.EnvAccountPeculiar.GENERAL);
        }

        bo.setId(IdTool.getId());
        EntityTool.saveBase(bo);
        opsEnvAccountService.save(bo);
        return ResultJson.success(bo);
    }


    /**
     * 环境账号访问信息数据校验
     * @param bo 环境账号访问信息 校验数据
     * @return 非null则有错误
     */
    private String checkOpsEnvAccount(OpsEnvAccount bo){

        return null;
    }

}
